/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package perfiladoinmdm.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Vector;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 *
 * @author mrequejo
 */
public class Util {

    public static double[][] txt2Array(String path, int filas, int columnas) {

        String linea = ""; //Cada linea del fichero.txt 
        FileReader fr = null;
        BufferedReader br = null;

        double[][] matrix = new double[filas][columnas];

        try {

            //RECORRER EL FICHERO PARA COMPROBAR 
            fr = new FileReader(path);
            br = new BufferedReader(fr);
            int countLineas = 0;
            String cadena;
            int col = 0;

            //Recorremos linea a linea el fichero 
            while (br.ready()) {
                linea = br.readLine();
                int numTokens = 0;
                StringTokenizer st = new StringTokenizer(linea);

                //System.out.println(countLineas);
                col = 0;

                // bucle por todas las palabras
                while (st.hasMoreTokens()) {
                    cadena = st.nextToken();
                    //System.out.print(columnas + " ");

                    double f = Double.parseDouble(cadena);
                    matrix[countLineas][col] = f;
                    col++;

                }

                countLineas++;

            }
            //System.out.println("");
        } catch (FileNotFoundException e) {
            System.out.println("Errorx: " + e);
        } catch (IOException e) {
            System.out.println("Errorx: " + e);
        }

//        // en la 9ª columna metemos el día global del año (1-365) 
//        // (si es el archivo de coeficientes)
//        if (columnas > 8) {
//            matrix[0][8] = 1;
//            for (int i = 1; i < matrix.length; i++) {
//                if (matrix[i][1] == matrix[i - 1][1]) {
//                    matrix[i][8] = matrix[i - 1][8];
//                } else {
//                    matrix[i][8] = matrix[i - 1][8] + 1;
//                }
//
//            }
//        }
        return matrix;
    }

    public static void plotMatrix(double[][] matrix, int filas) {
        //System.out.println("Pintando: "+ PerfiladoMedidas.getClass().getDeclaredFields()[0].getName());
        for (int i = 0; i < filas; i++) {
            System.out.print("fila [" + i + "]: ");
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println("");
        }
        System.out.println("");
    }

    // Sobrecarga de plotMatrix: Si no ponemos el segundo parámetro se pinta la
    // matriz completa

    public static void plotMatrix(double[][] matrix) {
        //System.out.println("Pintando: "+ PerfiladoMedidas.getClass().getDeclaredFields()[0].getName());
        for (int i = 0; i < matrix.length; i++) {
            System.out.print("fila [" + i + "]: ");
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println("");
        }
        System.out.println("");
    }

    public static void plotArray(double[] array) {
        //System.out.println("Pintando: "+ PerfiladoMedidas.getClass().getDeclaredFields()[0].getName());
        for (int i = 0; i < array.length; i++) {
            System.out.println("elem:" + i + ": " + array[i]);
        }
        System.out.println("");
    }

    public static void plotArray(double[] array, int numElementos) {
        //System.out.println("Pintando: "+ PerfiladoMedidas.getClass().getDeclaredFields()[0].getName());
        for (int i = 0; i < numElementos; i++) {
            System.out.println("elem:" + i + ": " + array[i]);
        }
        System.out.println("");
    }

    public double[][] castArray2Double(int[][] matrix) {
        int filas = matrix.length;
        int columnas = matrix[0].length;
        double[][] resultado = new double[filas][columnas];
        for (int i = 0; i < filas; i++) {
            for (int j = 0; j < columnas; j++) {
                resultado[i][j] = (double) matrix[i][j];
            }
        }
        return resultado;
    }    
    
    public static void borrarLineaFichero() {

        //VARIABLES 
        String path = "D:\\Mis Documentos\\Miguel Díaz\\Perfilado_09.14\\REEprueba.txt"; //Path y nombre del fichero 
        String linea = ""; //Cada linea del fichero.txt 
        String[] codigo = new String[12]; //Codigo a borrar 
        String comienzoLinea = ""; //Codigo de cada linea del fichero.txt 
        FileReader fr = null;
        BufferedReader br = null;
        FileWriter fw = null;
        BufferedWriter bw = null;
        Vector lineasAcopiar = new Vector(); //Vector para almacenar lineas a copiar 

        try {

            //RECORRER EL FICHERO PARA COMPROBAR 
            fr = new FileReader(path);
            br = new BufferedReader(fr);
            //Recorremos linea a linea el fichero 
            while (br.ready()) {
                linea = br.readLine();
                //Guardamos los tres primeros caracteres de la linea(el codigo) 
                try {
                    comienzoLinea = linea.substring(0, 15);
                } catch (Exception e) {
                }
                //Si el codigo de la linea es diferente al codigo introducido: 
                //Añadimos la linea en el vector lineasAcopiar 

                if (comienzoLinea.charAt(7) != 'N') {

                    if (comienzoLinea.charAt(14) == '0'
                            || comienzoLinea.charAt(14) == '1'
                            || comienzoLinea.charAt(14) == '2'
                            || comienzoLinea.charAt(14) == '3'
                            || comienzoLinea.charAt(14) == '4'
                            || comienzoLinea.charAt(14) == '5'
                            || comienzoLinea.charAt(14) == '6'
                            || comienzoLinea.charAt(14) == '7'
                            || comienzoLinea.charAt(14) == '8'
                            || comienzoLinea.charAt(14) == '9') {
                        lineasAcopiar.add(linea);
                    }
                }

            }
            br.close();

            //RECORREMOS EL VECTOR Y GUARDAMOS LA LINEAS EN EL FICHERO 
            fw = new FileWriter(path);
            bw = new BufferedWriter(fw);
            //Recorremos el vector 
            for (int i = 0; i < lineasAcopiar.size(); i++) {
                //Guardamos en linea cada String del vector 
                linea = (String) lineasAcopiar.elementAt(i);
                //Escribimos la linea en el fichero y hacemos un salto de linea 
                bw.write(linea);
                bw.newLine();
            }
            bw.close();

            System.out.println("La linea con codigo " + codigo + " ha sido borrada");

        } catch (Exception e) {
            System.out.println("Error: " + e);
        }

    }

    public static void plotFuncionJFreeChart(double[] array1D) {
        // create a dataset...
        XYSeriesCollection result = new XYSeriesCollection();
        XYSeries series = new XYSeries("Perfilado");
        for (int i = 0; i < 100; i++) {
            series.add(i, array1D[i]);
        }
        result.addSeries(series);

        // create a chart...
        JFreeChart chart = ChartFactory.createXYLineChart(
                "Perfilado", // chart title
                "Hora", // x axis label
                "Consumo", // y axis label
                result, // data 
                PlotOrientation.VERTICAL,
                true, // include legend
                true, // tooltips
                false // urls
        );

        // create and display a frame...
        ChartFrame frame = new ChartFrame("Perfilado de curva horaria", chart);
        frame.pack();
        frame.setVisible(true);
    }

}
